//
//  CHSUpgradeManager.h
//  MerchantBusinessClient
//
//  Created by 海参 on 2021/7/19.
//  Copyright © 2021 com.Chs. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CAIClientVoModel.h"
#import "CAIUpgradeGeneralUIConfig.h"
#import <ZXCheckAppItunesVersionManager/ZXCheckAppItunesVersionManager.h>

NS_ASSUME_NONNULL_BEGIN

@interface CAIUpgradeManager : NSObject


/// 请求检查版本更新带默认UI弹窗样式,可配置UI ----已弃用
/// @param greyResult 灰度回调；model:请求response模型
/// @param config CAIUpgradeGeneralUIConfig对象
/// @param failureBlock 请求失败回调
+ (void)checkUpdateWithUIWithNeedGreyAction:(void(^)(CAIClientVoModel *model,id responseObject))greyResult
                                 configueUI:(nullable CAIUpgradeGeneralUIConfig *)config
                               failureBlock:(nullable void(^)(id _Nonnull meta))failureBlock API_DEPRECATED("-checkUpdateWithUIWithConfigueUI: instead.", ios(2.0, 15.0));



/// 请求业务接口基础检查版本是否有更新,不带UI弹窗；(灰度||(应用市场升级||ABM))
/// @param checkResult isHaveNewVersion：是否有新版本更新，包含灰度和应用市场升级
/// @param failureBlock 请求失败回调
+ (void)checkUpdateGeneralWithResult:(nullable void(^)(CHSClientPackageModel *model,BOOL isHaveNewVersion))checkResult
                        failureBlock:(nullable void(^)(id meta))failureBlock;


/// 请求业务接口详细检查版本是否有更新,不带UI弹窗，有灰度、(应用市场升级||ABM)的独立回调；基于基础检查的API处理。
/// @param checkResult 是否有新版本更新，包含灰度和应用市场升级;
/// @param storeResult 有应用市场版本升级回调;model:请求response模型；
/// @param greyResult 有灰度的回调；model:请求response模型;responseObject:源json数据字符串
/// @param failureBlock 请求失败回调
+ (void)checkUpdateDetailWithResult:(nullable void(^)(BOOL isHaveNewVersion))checkResult
                   needStoreUpgrade:(nullable void(^)(CAIClientVoModel *model))storeResult
                           needGrey:(nullable void(^)(CAIClientVoModel *model,id responseObject))greyResult
                       failureBlock:(nullable void(^)(id meta))failureBlock;



/// 请求业务接口检查版本是否有更新，带默认UI弹窗样式;
/// @param checkResult 是否有新版本更新
/// @param greyMiddleActionResult 灰度弹窗确认跳转灰度中间页的回调（model:请求response模型;middleUrl：灰度中间页，responseObject:源json数据字符串）如果没有配置灰度页地址，则内部直接跳转到testFilght页不会回调，如果有，则回调。自己用h5容器跳转到灰度中间页，并传递json数据。
/// @param failureBlock 请求失败回调
+ (void)checkUpdateWithUIWithResult:(nullable void(^)(BOOL isHaveNewVersion))checkResult
           needGreyMiddlePageAction:(void(^)(CAIClientVoModel *model,NSString *middleUrl,id responseObject))greyMiddleActionResult
                       failureBlock:(nullable void(^)(id meta))failureBlock;


/// 请求业务接口检查版本是否有更新，带默认UI弹窗样式,可配置UI;
/// @param config CAIUpgradeGeneralUIConfig对象
/// @param checkResult 是否有新版本更新回调
/// @param greyMiddleActionResult 灰度弹窗确认跳转灰度中间页的回调（model:请求response模型;middleUrl：灰度中间页，responseObject:源json数据字符串）如果没有配置灰度页地址，则内部直接跳转到testFilght页不会回调，如果有，则回调。自己用h5容器跳转到灰度中间页，并传递json数据。
/// @param failureBlock 请求失败回调
+ (void)checkUpdateWithUIWithConfigueUI:(nullable CAIUpgradeGeneralUIConfig *)config
                                 result:(nullable void(^)(BOOL isHaveNewVersion))checkResult
               needGreyMiddlePageAction:(void(^)(CAIClientVoModel *model,NSString *middleUrl,id responseObject))greyMiddleActionResult
                           failureBlock:(nullable void(^)(id meta))failureBlock;



/// 根据已知model检查版本更新,不带UI弹窗；
/// @param model 外部传入数据
/// @param checkResult  isHaveNewVersion：是否有新版本更新，包含灰度和升级
+ (void)checkUpdateWithModel:(CAIClientVoModel *)model
                      result:(nullable void(^)(CHSClientPackageModel *packageModel,BOOL isHaveNewVersion))checkResult;


/// 根据已知model检查版本更新，带默认UI弹窗样式,可配置外观。
/// @param model 外部传入数据
/// @param config config description
/// @param checkResult  isHaveNewVersion：是否有新版本更新，包含灰度和升级
/// @param greyMiddleActionResult 灰度弹窗确认跳转灰度中间页的回调（model:请求response模型;middleUrl：灰度中间页，responseObject:源json数据字符串）如果没有配置灰度页地址，则内部直接跳转到testFilght页不会回调，如果有，则回调。自己用h5容器跳转到灰度中间页，并传递json数据。
+ (void)checkUpdateWithUIWithModel:(CAIClientVoModel *)model
                        configueUI:(nullable CAIUpgradeGeneralUIConfig *)config
                            result:(nullable void(^)(BOOL isHaveNewVersion))checkResult
          needGreyMiddlePageAction:(void(^)(CAIClientVoModel *model,NSString *middleUrl,id responseObject))greyMiddleActionResult;



/// 只检查itunes应用商店是否有新版本
/// @param model 传入的appId信息，itunes地址
/// @param checkResult 检查结果，返回itunes商店的信息
/// @param failure 失败
+ (void)checkOnlyItunesWithUIWithModel:(CAIClientVoModel *)model
                           checkResult:(void(^)(BOOL isHaveNewVersion))checkResult
                               failure:(void(^)(NSError* error))failure;

/// 获取SDK版本号
+ (NSString *)version;





@end

NS_ASSUME_NONNULL_END
